]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
popupMenu: Use an appropriate key to move focus into the menu
authorFlorian Müllner <fmuellner@gnome.org>
Thu, 28 Aug 2014 15:27:00 +0000 (17:27 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Thu, 28 Aug 2014 17:12:48 +0000 (19:12 +0200)
The code from PanelMenu.Button assumed menus would open below their
source actor, making KEY_Down a good choice; however with the new
generic code, we should base the key used on the actual menu position.

https://bugzilla.gnome.org/show_bug.cgi?id=735614

js/ui/popupMenu.js

index 3d41b73f49f0924e34cf126e79d9f752b5234a82..1694e0a04f496bbc6c147742e9437c5c87cc27c9 100644 (file)
@@ -746,6 +746,22 @@ const PopupMenu = new Lang.Class({
     },
 
     _onKeyPress: function(actor, event) {
+        let navKey;
+        switch (this._boxPointer.arrowSide) {
+            case St.Side.TOP:
+                navKey = Clutter.KEY_Down;
+                break;
+            case St.Side.BOTTOM:
+                navKey = Clutter.KEY_Up;
+                break;
+            case St.Side.LEFT:
+                navKey = Clutter.KEY_Right;
+                break;
+            case St.Side.RIGHT:
+                navKey = Clutter.KEY_Left;
+                break;
+        }
+
         let symbol = event.get_key_symbol();
         if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) {
             this.toggle();
@@ -753,10 +769,10 @@ const PopupMenu = new Lang.Class({
         } else if (symbol == Clutter.KEY_Escape && this.isOpen) {
             this.close();
             return Clutter.EVENT_STOP;
-        } else if (symbol == Clutter.KEY_Down) {
+        } else if (symbol == navKey) {
             if (!this.isOpen)
                 this.toggle();
-            this.actor.navigate_focus(actor, Gtk.DirectionType.DOWN, false);
+            this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
             return Clutter.EVENT_STOP;
         } else
             return Clutter.EVENT_PROPAGATE;